<?php
/**
 * Created by PhpStorm.
 * User: 郝飞
 * Date: 2017/4/7
 * Time: 10:53
 */
namespace Payment\Controller;
use Common\Controller\FrontbaseController;

class PayController extends FrontbaseController{

	protected $payment_history_model;

	public function _initialize() {
		parent::_initialize();
		$user = session('user');
		if(!$user['id']){
			$arr['error'] = '201';
			$arr['error_msg'] = '请先登录';
			$this->output($arr);
			exit;
		}
		$this->payment_history_model = D('PaymentHistory');
	}
	/**
	 * 添加订单
	 */
	public function add_orders(){

		$price = I('price'); //价格
		switch($price)
		{
			case '588':
				$className = 'VIP咨询师';
				$classType = '1';
				break;
			case '1088':
				$className = '超级VIP咨询师';
				$classType = '2';
				break;
		}
		$user = session('user');
		$uid = $user['id'];
		$orderNumber = getRandom('22').time();
		$data['uid'] = $uid;
		$data['order_number'] = $orderNumber;
		$data['classification_id'] = $classType;
//		$data['money'] = $price;
		$data['money'] = '0.01';//TODO::删除测试
		$data['addtime'] = time();
		$data['status'] = '0';
		$result = $this->payment_history_model->data($data)->add();
		if($result){
			$arr['status'] = '1';
			$arr['msg'] = '添加成功';
			$arr['subject'] = $className;
			$arr['body'] =  $className;
			$arr['money'] = $price;
			$arr['tradeNO'] = $orderNumber;
			$arr['order_id'] = $result; //添加的订单id
		} else {
			$arr['status'] = '0';
			$arr['msg'] = '添加失败';
		}
		$this->output($arr);
	}
	//更新订单
	public function updata_orders(){
		$orderID = I("orderID"); //订单id
		$user_status = I("user_status"); //用户角色
		//更改用户角色
		$user = session('user');
		$uid = $user['id'];
		$user_result = \User\Lib\ImiLib::updataInfoByFieldName($uid,'user_type',$user_status);
		//更改订单状态
		$data['status'] = '1';
		$result = $this->payment_history_model
			->where("payment_history_id = $orderID")
			->save($data);
		if($result !== false && $user_result !== false){
			$arr['status'] = '1';
			$arr['msg'] = '订单状态更新成功';
		} else {
			$arr['status'] = '0';
			$arr['msg'] = '订单状态更新失败';
		}
		$this->output($arr);
	}
	/**
	 * 支付前调用
	 * 所有的数据都在服务端进行组合，最后返回给客户端一个处理后的字符串。
	 */
	function  alipay_before(){
		require_once C(EXTEND_PATH).'Alipay/alipaycore.php';
		require_once C(EXTEND_PATH).'Alipay/alipayrsa.php';
		$order_id = I('orderID');
		if(!$order_id){
			$arr['msg'] = '非法数据';
			$this->output($arr);
			exit;
		}
		$order_info = $this->payment_history_model->find($order_id);
		switch($order_info['classification_id']){
			case '1':
				$subject = 'VIP咨询师';
				break;
			case '2':
				$subject = '超级VIP咨询师';
				break;
		}
		//建立请求
		$out_trade_no = $order_info['order_number']; //订单号
		$total_fee = $order_info['money'];   //付款金额
		$body = '成为会员';  //商品详情
		$alipay_config = C('alipay_config');
		//构造要请求的参数数组，无需改动
		$parameter = array(
			'partner'=>$alipay_config['partner'],//合作者身份ID
			'seller_id'=>$alipay_config['seller_id'],
			'out_trade_no'=>$out_trade_no,//商户网站唯一订单号
			'subject'=>$subject,//商品名称
			'body'=>$body,//商品详情
			'total_fee'=>$total_fee,
			'notify_url'=>$alipay_config['notify_url'],//服务器异步通知页面路径
			'service'=>$alipay_config['service'],//接口名称
			'payment_type'=>$alipay_config['payment_type'],//支付类型
			'_input_charset'=>$alipay_config['input_charset'],//参数编码字符集
		);
		//将post接收到的数组所有元素，按照“参数=参数值”的模式用“&”字符拼接成字符串。
		$data = createLinkstring($parameter);
		//将待签名字符串使用私钥签名,且做urlencode. 注意：请求到支付宝只需要做一次urlencode.
		$rsa_sign = urlencode(rsaSign($data, $alipay_config['private_key']));
		//把签名得到的sign和签名类型sign_type拼接在待签名字符串后面。
		$data = $data.'&sign='.'"'.$rsa_sign.'"'.'&sign_type='.'"'.$alipay_config['sign_type'].'"';
		//打印待签名字符串。工程目录下的log文件夹中的log.txt。
//		logResult($data);
		//返回给客户端,建议在客户端使用私钥对应的公钥做一次验签，保证不是他人传输。
		$arr['orderInfo'] = $data;
		$this->output($arr);
	}

	/**
	 * 支付宝支付通知
	 */
	/*public function alipay_notify_url() {
		require_once C(EXTEND_PATH).'Alipay/Alipaynotify.php';
		date_default_timezone_set("PRC");
		$fp = fopen("./application/Payment/Controller/sss.txt","a");
		flock($fp, LOCK_EX) ;
		fwrite($fp,"执行日期：".strftime("%Y%m%d%H%M%S",time())."\n"."1231231"."\n");
		flock($fp, LOCK_UN);
		fclose($fp);
		$alipay_config = C('alipay_config');
		//计算得出通知验证结果
		$alipayNotify = new \AlipayNotify($alipay_config);
		if($alipayNotify->getResponse($_POST['notify_id'])){//判断成功之后使用getResponse方法判断是否是支付宝发来的异步通知。
			if($alipayNotify->getSignVeryfy($_POST, $_POST['sign'])) {//使用支付宝公钥验签
				//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
				//获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
				//商户订单号
				$out_trade_no = $_POST['out_trade_no'];
				//支付宝交易号
				$trade_no = $_POST['trade_no'];
				//交易状态
				$trade_status = $_POST['trade_status'];
				if($_POST['trade_status'] == 'TRADE_FINISHED') {
					//判断该笔订单是否在商户网站中已经做过处理
					//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
					//如果有做过处理，不执行商户的业务程序
					//注意：
					//退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
					//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
				} else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
					$order_info = $this->payment_history_model
						->where("order_number = $out_trade_no")
						->find();
					if($order_info['status'] == 0){
						//更新支付状态和支付时间
						$data['payorder'] = $trade_no ;
						$data['addtime'] = time();
						$result = $this->payment_history_model
							->where("order_number = $out_trade_no")
							->save();
					}
				}
				//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
				echo "success";                //请不要修改或删除
			} else{ //验证签名失败
				echo "sign fail";
			}
		} else{ //验证是否来自支付宝的通知失败
			echo "response fail";
		}
	}*/
}